home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / libraries / mui20dev.lha / MUI / Developer / Oberon / txt / MuiBasics.mod < prev    next >
Text File  |  1994-02-08  |  63KB  |  1,958 lines

  1. (*------------------------------------------
  2.   :Module.      MuiBasics.mod
  3.   :Author.      Albert Weinert  [awn]
  4.   :Address.     Felblumenweg 2 , 50769 Köln, Germany
  5.   :EMail.       Usenet_> a.weinert@darkness.gun.de
  6.   :EMail.       Z-Netz_> A.WEINERT@DARKNESS.ZER
  7.   :Phone.       0221 / 700 83 82
  8.   :Revision.    R.13
  9.   :Date.        05-Feb-1994
  10.   :Copyright.   FreeWare.
  11.   :Language.    Oberon-2
  12.   :Translator.  AmigaOberon V3.11
  13.   :Contents.    Die Makros die in "mui.h" definiert waren als Prozeduren
  14.   :Imports.     <Importiertes, Name/ShortCut des Autors>
  15.   :Remarks.     Bei VCenter, HCenter, Popup ist es etwas anders.
  16.   :Bugs.        <Bekannte Fehler>
  17.   :Usage.       <Angaben zur Anwendung>
  18.   :History.     .1     [awn] 22-Aug-1993 : Die Prozeduren die in Mui.mod waren nun
  19.   :History.            entfernt und ein seperates Modul daraus gemacht, so das
  20.   :History.            man nicht darauf angewiesen dies in seinem Interfaces zu haben.
  21.   :History.     .2     [awn] 24-Aug-1993 : Kräftig aufgeräumt um den erzeugten
  22.   :History.            Maschinencode so kurz wie möglich zu halten.
  23.   :History.     .3     [awn] 24-Aug-1993 : PopupEnd() so erweitert das nun ein
  24.   :History.            Objekt mit angeben werden kann, dies ist dafür gedacht wenn
  25.   :History.            man das Popup zu einem anderen Objekt anordnet (z.B String )
  26.   :History.     .4     [awn] 24-Aug-1993 : Im Zuge der Popup Änderung wurde eine
  27.   :History.            eigene Speziell auf Mui abgestimmte Hook Parameter übergabe
  28.   :History.            erstellt (Allerdings OS Konform eingebettet). Der Parameter
  29.   :History.            Deklaration der Hook-Prozedur muss nun so aussehen wie der
  30.   :History.            Typ `HookDef'.
  31.   :History.     .5     [awn] 25-Aug-1993 : Tipfehler bei TagItem2() und TagItem3()
  32.   :History.            entfernt.
  33.   :History.     .6     [awn] 25-Aug-1993 : Die Groups und Frames wieder mit der
  34.   :History.            Möglichkeit versehen dort TagListen zu übergeben.
  35.   :History.     .7     [awn] 30-Aug-1993 : PageGroup() hizugefügt.
  36.   :History.     .8     [awn] 14-Sep-1993 : Fehler bei Strings() dort wurde in der
  37.   :History.            Deklaration 2 mal A1 benutzt.
  38.   :History.     .9     [awn] 03-Oct-1993 : Eine einfache Plausibiltätsprüfung eingebaut.
  39.   :History.            Für jede #?Object() Prozedur gibt es nun ein End#?() Prozedure,
  40.   :History.            wenn der Objekt Typ nicht übereinstimmt wird ein NIL zurückgeben.
  41.   :History.            Dies ist dafür um während der Programmentwicklung Abstürze zu
  42.   :History.            umgehen, wenn das Programm einmal steht sind diese nicht mehr
  43.   :History.            notwendig, aber brauchen nicht entfernt zu werden.
  44.   :History.     .10    [awn] 30-Oct-1993 : An MUI 1.4 angepasst, die neuen Objekte
  45.   :History.            hinzugefügt (Coloradjust, Colorfield, Palette, Virtgroup, Scrollgroup
  46.   :History.            und Scrmodelist), die Group Prozeduren gibt es nun auch für Virtgroups
  47.   :History.            z.B. HGroupV(). Sonstige neue Prozeduren, KeyRadio(), Slider(), KeySlider(),
  48.   :History.            LLabel?() und KeyLLabel?().
  49.   :History.     .11    [awn] 31-Jan-1994 : Angepasst an MUI 1.5, Fehler bei SliderObject()
  50.   :History.            entfernt (Rief RadioObject auf). Es gibt nun für *jede* Objekt ein
  51.   :History.            passendes. Bei Popupend() wird nun auch das Background Image gesetzt.
  52.   :History.     .12    [awn] 02-Feb-1994 : INewObject() und IEnd() aufgenommen, der Aufruf
  53.   :History.            von INewObject() ist wie der von Intuition.NewObject() nur ohne
  54.   :History.            Rückgabeparamter. INewObject() muss *anstatt* Intuition.NewObject()
  55.   :History.            aufgerufen werden wenn die Objekte direkt mit ins Layout sollen.
  56.   :History.            INewObject() *muss* ein IEnd() bzw. iEnd() folgen. siehe Class1.mod
  57.   :History.     .13    [awn] 05-Feb-1994 : VSlider() und KeyVSlider() aufgenommen.
  58.  
  59. --------------------------------------------*)
  60.  
  61. MODULE MuiBasics;
  62.  
  63. IMPORT Exec, Utility, Intuition, SYSTEM, Mui;
  64.  
  65. CONST   ArrayAdd = 16;
  66.  
  67. TYPE
  68.   TagArray * = UNTRACED POINTER TO ARRAY OF Utility.TagItem;
  69.   Class    * = UNTRACED POINTER TO ClassDesc;
  70.   Args     * = UNTRACED POINTER TO ArgsDesc;
  71.   Hook     * = UNTRACED POINTER TO HookDesc;
  72.  
  73.   ClassDesc = STRUCT( n : Exec.Node );
  74.                 name   : ARRAY 32 OF CHAR;
  75.                 iclass : Intuition.IClassPtr;
  76.                 tags   : TagArray;
  77.                 tagnum : LONGINT;
  78.                 tagdata : BOOLEAN;
  79.               END;
  80.  
  81.   ArgsDesc * = STRUCT END;
  82.  
  83.   PopupArgs * = STRUCT ( d : ArgsDesc );
  84.                   linkedObj : Mui.Object (* Das Objekt zu dem das Popup Object gelinkt ist *)
  85.                 END;
  86.   HookDef * = PROCEDURE ( hook : Hook; object : Mui.Object; args : Args ):LONGINT;
  87.  
  88.  
  89. (* Hook-Example.
  90.  *
  91.  *  TYPE  PopWindowArgs = STRUCT( d : MuiBasics.ArgsDesc );
  92.  *                          window : Mui.Object;
  93.  *                        END;
  94.  *
  95.  *  VAR myHook : MuiBasics.Hook;
  96.  *      button : Mui.Object;
  97.  *      window : Mui.Object;
  98.  *
  99.  *  PROCEDURE PopWindow( hook : Hook; object : Mui.Object; args : Args ) : LONGINT;
  100.  *    BEGIN
  101.  *      IF args # NIL THEN
  102.  *        IF args(PopWindowArgs).window # NIL THEN
  103.  *          Mui.DoMethod( args(PopWindowArgs).window, Mui.mWindowToFront );
  104.  *        END;
  105.  *      END;
  106.  *      RETURN 0;
  107.  *    END PopWindow;
  108.  *
  109.  *  BEGIN
  110.  *    [... create Application Windows ...]
  111.  *
  112.  *    myHook := MuiBasics.MakeHook( PopWindow );
  113.  *    IF myHook # NIL THEN
  114.  *      Mui.DoMethod( button, Mui.mNotify, Mui.aPressed, Exec.false,
  115.  *                    button, 3, Mui.mCallHook, myHook, window );
  116.  *    END;
  117.  *    [... Do the other magic ...]
  118.  *
  119.  * Note: Typed on the fly, no warranty is given that this piece of code reallay work.
  120.  *)
  121.  
  122.   HookDesc * = STRUCT( minNode : Exec.MinNode );
  123.              entry     : PROCEDURE ( hook{8}   : Hook;
  124.                                      object{10}: Mui.Object;
  125.                                      args{9}: Args ):LONGINT;
  126.              subEntry  : HookDef;
  127.              a5 : Exec.APTR;
  128.  
  129.              object : Mui.Object;
  130.            END;
  131.  
  132. VAR no : Exec.List;
  133.  
  134.   (* ---- MuiBasics Hook-Dispatcher ---- *)
  135.   PROCEDURE HookEntry*(hook{8}: Hook;               (* $SaveRegs+ $StackChk- *)
  136.                        object{10}: Mui.Object;
  137.                        args{9}: Args): LONGINT;
  138.   (*
  139.    * Calls hook.subEntry. The contents of A5 have to be stored in hook.a5,
  140.    * else A5 would not be set correctly.
  141.    *)
  142.   
  143.   BEGIN
  144.     SYSTEM.SETREG(13,hook.a5);
  145.     RETURN hook.subEntry(hook,object,args);
  146.   END HookEntry;
  147.  
  148.   PROCEDURE MakeHook* ( entry: HookDef ):Hook;
  149.   (*------------------------------------------
  150.     :Input.     entry : Prozedure die gestartet werden soll, wenn der Hook
  151.     :Input.             aufgerufen wird.
  152.     :Output.    Hook der direkt einsatzfähig ist (oder NIL, falls es nicht
  153.     :Output.    geklappt haben sollte).
  154.     :Semantic.  Erstellt einen Hook und bindet die Prozedure ein.
  155.     :Note.
  156.     :Update.    24-Aug-1993 [awn] - erstellt.
  157.   --------------------------------------------*)
  158.     VAR hook : Hook;
  159.   BEGIN
  160.     NEW( hook );
  161.     IF hook # NIL THEN
  162.       hook.entry := HookEntry;
  163.       hook.subEntry := entry;
  164.       hook.a5 := SYSTEM.REG(13);
  165.     END;
  166.     RETURN hook;
  167.   END MakeHook;
  168.  
  169.   PROCEDURE SetHookObject*( hook : Hook; object : Mui.Object );
  170.   (*------------------------------------------
  171.     :Input.     hook : Initialisierte Hook;
  172.     :Input.     object : Das Object zu wem der Hook gelinkt ist.
  173.     :Output.
  174.     :Semantic.  Trägt in die Hook-Struktur ein Object ein, so
  175.     :Semantic.  das man später noch darauf zugreifen kann.
  176.     :Note.
  177.     :Update.    24-Aug-1993 [awn] - erstellt.
  178.   --------------------------------------------*)
  179.     BEGIN
  180.       IF hook # NIL THEN
  181.         hook.object := object;
  182.       END;
  183.     END SetHookObject;
  184.  
  185.   PROCEDURE GetHookObject*( hook : Hook ):Mui.Object;
  186.   (*------------------------------------------
  187.     :Input.     hook : Ein Hook
  188.     :Output.    Das Objekt welches in der Hook Struktur eingetragen ist
  189.     :Semantic.
  190.     :Note.
  191.     :Update.    24-Aug-1993 [awn] - erstellt.
  192.   --------------------------------------------*)
  193.     BEGIN
  194.       IF hook # NIL THEN
  195.         RETURN hook.object;
  196.       END;
  197.     END GetHookObject;
  198.  
  199.   PROCEDURE Init();
  200.     BEGIN
  201.       no.head := SYSTEM.ADR( no.tail );
  202.       no.tail := NIL;
  203.       no.tailPred := SYSTEM.ADR( no.head );
  204.     END Init;
  205.  
  206.   PROCEDURE NewClass*();
  207.   (* $SaveRegs+ *)
  208.     VAR cl : Class;
  209.     BEGIN
  210.       NEW( cl );
  211.  
  212.       (* $IF GarbageCollector *)
  213.  
  214.       Exec.AddTail( no, cl );
  215.  
  216.       (* $ELSE *)
  217.  
  218.       IF cl # NIL THEN
  219.         Exec.AddTail( no, SYSTEM.VAL( Exec.CommonNodePtr, cl ) );
  220.         cl.tagdata := FALSE;
  221.       END;
  222.  
  223.       (* $END *)
  224.     END NewClass;
  225.  
  226.   PROCEDURE CheckAndExpandTags( cl : Class;  n : LONGINT);
  227.   (* $SaveRegs+ *)
  228.     VAR newtags : TagArray;
  229.         ShouldLen, MaxLen, i : LONGINT;
  230.  
  231.     BEGIN
  232.       IF n = 0 THEN RETURN END;
  233.       IF cl.tags # NIL THEN
  234.         ShouldLen := cl.tagnum + n;
  235.         MaxLen := LEN( cl.tags^ )-1;
  236.         IF ShouldLen >= MaxLen THEN
  237.           INC( ShouldLen, ArrayAdd );
  238.           SYSTEM.ALLOCATE( newtags, ShouldLen );
  239.           FOR i := 0 TO cl.tagnum-1 DO
  240.             newtags[i] := cl.tags[i];
  241.           END;
  242.  
  243.           (* $IF GarbageCollector *)
  244.  
  245.             cl.tags := newtags;
  246.  
  247.           (* $ELSE *)
  248.  
  249.             DISPOSE( cl.tags );
  250.             cl.tags := newtags;
  251.  
  252.           (* $END *)
  253.         END;
  254.       ELSE
  255.         ShouldLen := ArrayAdd + n ;
  256.         NEW( cl.tags, ShouldLen );
  257.         cl.tagnum := 0;
  258.       END;
  259.     END CheckAndExpandTags;
  260.  
  261.   PROCEDURE clTag ( cl : Class;  tag : Exec.APTR );
  262.   (* $SaveRegs+ *)
  263.     BEGIN
  264.       CheckAndExpandTags( cl, 1 );
  265.       IF cl.tags # NIL THEN
  266.         IF cl.tagdata THEN
  267.           cl.tags[cl.tagnum].data := tag;
  268.           cl.tagdata := FALSE;
  269.           INC( cl.tagnum );
  270.         ELSE
  271.           cl.tags[cl.tagnum].tag := tag;
  272.           cl.tagdata := TRUE;
  273.         END;
  274.       END;
  275.     END clTag;
  276.  
  277.   PROCEDURE clTagItem ( cl : Class;  tag, data : Exec.APTR );
  278.   (* $SaveRegs+ *)
  279.     BEGIN
  280.       CheckAndExpandTags( cl, 1 );
  281.       IF cl.tags # NIL THEN
  282.         cl.tags[cl.tagnum].data := data;
  283.         cl.tags[cl.tagnum].tag := tag;
  284.         INC( cl.tagnum );
  285.       END;
  286.     END clTagItem;
  287.  
  288.   PROCEDURE countTag( tags{9} : Utility.TagListPtr) : LONGINT;
  289.   (* $SaveRegs+ *)
  290.     VAR i : LONGINT;
  291.     BEGIN
  292.       IF tags = NIL THEN RETURN( 0 ) END;
  293.       i:=0;
  294.       WHILE tags[i].tag # Utility.end DO INC(i); END;
  295.       RETURN i;
  296.     END countTag;
  297.  
  298.   PROCEDURE clTagsA*( cl{8} : Class;  tags{9} : Utility.TagListPtr );
  299.   (* $SaveRegs+ *)
  300.     VAR  i : LONGINT;
  301.  
  302.     BEGIN
  303.       IF tags = NIL THEN RETURN END;
  304.       CheckAndExpandTags( cl, countTag( tags ) );
  305.       i:=0;
  306.       IF cl.tags # NIL THEN
  307.         WHILE tags[i].tag # Utility.end DO
  308.           cl.tags[cl.tagnum] := tags[i];
  309.           INC(cl.tagnum); INC(i);
  310.         END;
  311.       END;
  312.     END clTagsA;
  313.  
  314.   PROCEDURE clTags{"MuiBasics.clTagsA"} ( cl{8} : Class;  tags{9}.. : Utility.Tag );
  315.  
  316.   PROCEDURE TagsA*( tags{9} : Utility.TagListPtr );
  317.   (* $SaveRegs+ *)
  318.     BEGIN
  319.       IF no.tailPred # SYSTEM.ADR( no.head ) THEN;
  320.         clTagsA( SYSTEM.VAL( Class, no.tailPred ), tags );
  321.       END;
  322.     END TagsA;
  323.  
  324.   PROCEDURE Tags*{"MuiBasics.TagsA"} ( tags{9}.. : Utility.Tag );
  325.  
  326.   PROCEDURE Tag*( tag : Exec.APTR );
  327.   (* $SaveRegs+ *)
  328.     BEGIN
  329.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  330.         clTag( SYSTEM.VAL( Class, no.tailPred ), tag );
  331.       END;
  332.     END Tag;
  333.  
  334.   PROCEDURE TagItem*( tag, data : Exec.APTR );
  335.   (* $SaveRegs+ *)
  336.     BEGIN
  337.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  338.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag, data );
  339.       END;
  340.     END TagItem;
  341.  
  342.   PROCEDURE TagItem2*( tag1, data1, tag2, data2 : Exec.APTR );
  343.   (* $SaveRegs+ *)
  344.     BEGIN
  345.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  346.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag1, data1 );
  347.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag2, data2 );
  348.       END;
  349.     END TagItem2;
  350.  
  351.   PROCEDURE TagItem3*( tag1, data1, tag2, data2, tag3, data3 : Exec.APTR );
  352.   (* $SaveRegs+ *)
  353.     BEGIN
  354.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  355.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag1, data1 );
  356.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag2, data2 );
  357.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag3, data3 );
  358.       END;
  359.     END TagItem3;
  360.  
  361.   PROCEDURE DEnd(mui : BOOLEAN):Mui.Object;
  362.     VAR cl : Exec.NodePtr;
  363.         ret : Exec.APTR;
  364.  
  365.     BEGIN
  366.       ret := NIL;
  367.       cl := no.tailPred;
  368.       WITH cl : Class DO
  369.  
  370.         IF cl.tags # NIL THEN
  371.           cl.tags[cl.tagnum].tag:=Utility.end;
  372.           IF mui THEN
  373.             ret := Mui.NewObject( cl.name, Utility.more, SYSTEM.ADR(cl.tags^) );
  374.           ELSE
  375.             IF cl.iclass # NIL THEN
  376.               ret := Intuition.NewObject( cl.iclass, NIL, Utility.more, SYSTEM.ADR(cl.tags^) );
  377.             ELSE
  378.               ret := Intuition.NewObject( NIL, cl.name, Utility.more, SYSTEM.ADR(cl.tags^) );
  379.             END;
  380.           END;
  381.         ELSE
  382.           IF mui THEN
  383.             ret := Mui.NewObject( cl.name );
  384.           ELSE
  385.             IF cl.iclass # NIL THEN
  386.               ret := Intuition.NewObject( cl.iclass, NIL );
  387.             ELSE
  388.               ret := Intuition.NewObject( NIL, cl.name );
  389.             END;
  390.           END;
  391.         END;
  392.  
  393.         Exec.Remove( cl );
  394.  
  395.         (* $IFNOT GarbageCollector *)
  396.  
  397.           DISPOSE( cl.tags );
  398.           DISPOSE( cl );
  399.  
  400.         (* $END *)
  401.  
  402.  
  403.         IF no.tailPred # SYSTEM.ADR( no.head ) THEN
  404.           clTag( SYSTEM.VAL( Class, no.tailPred ), ret );
  405.         END;
  406.  
  407.       END;
  408.       RETURN ret;
  409.     END DEnd;
  410.  
  411.   PROCEDURE End*():Mui.Object;
  412.     BEGIN
  413.       RETURN DEnd( TRUE );
  414.     END End;
  415.  
  416.   PROCEDURE end*();
  417.     BEGIN
  418.       SYSTEM.SETREG( 0, End() );
  419.     END end;
  420.  
  421.   PROCEDURE IEnd*():Mui.Object;
  422.     BEGIN
  423.       RETURN DEnd( FALSE );
  424.     END IEnd;
  425.  
  426.   PROCEDURE iEnd*();
  427.     BEGIN
  428.       SYSTEM.SETREG( 0, IEnd() );
  429.     END iEnd;
  430.  
  431.   PROCEDURE EndApplication*():Mui.Object;
  432.     BEGIN
  433.       IF Mui.cApplication # no.tailPred(Class).name THEN RETURN NIL END;
  434.       RETURN End();
  435.     END EndApplication;
  436.  
  437.   PROCEDURE EndNotify*():Mui.Object;
  438.     BEGIN
  439.       IF Mui.cNotify # no.tailPred(Class).name THEN RETURN NIL END;
  440.       RETURN End();
  441.     END EndNotify;
  442.  
  443.   PROCEDURE EndWindow*():Mui.Object;
  444.     BEGIN
  445.       IF Mui.cWindow # no.tailPred(Class).name THEN RETURN NIL END;
  446.       RETURN End();
  447.     END EndWindow;
  448.  
  449.   PROCEDURE EndRectangle*():Mui.Object;
  450.     BEGIN
  451.       IF Mui.cRectangle # no.tailPred(Class).name THEN RETURN NIL END;
  452.       RETURN End();
  453.     END EndRectangle;
  454.  
  455.   PROCEDURE EndImage*():Mui.Object;
  456.     BEGIN
  457.       IF Mui.cImage # no.tailPred(Class).name THEN RETURN NIL END;
  458.       RETURN End();
  459.     END EndImage;
  460.  
  461.   PROCEDURE EndText*():Mui.Object;
  462.     BEGIN
  463.       IF Mui.cText # no.tailPred(Class).name THEN RETURN NIL END;
  464.       RETURN End();
  465.     END EndText;
  466.  
  467.   PROCEDURE EndString*():Mui.Object;
  468.     BEGIN
  469.       IF Mui.cString # no.tailPred(Class).name THEN RETURN NIL END;
  470.       RETURN End();
  471.     END EndString;
  472.  
  473.   PROCEDURE EndProp*():Mui.Object;
  474.     BEGIN
  475.       IF Mui.cProp # no.tailPred(Class).name THEN RETURN NIL END;
  476.       RETURN End();
  477.     END EndProp;
  478.  
  479.   PROCEDURE EndSlider*():Mui.Object;
  480.     BEGIN
  481.       IF Mui.cSlider # no.tailPred(Class).name THEN RETURN NIL END;
  482.       RETURN End();
  483.     END EndSlider;
  484.  
  485.   PROCEDURE EndList*():Mui.Object;
  486.     BEGIN
  487.       IF Mui.cList # no.tailPred(Class).name THEN RETURN NIL END;
  488.       RETURN End();
  489.     END EndList;
  490.  
  491.   PROCEDURE EndFloattext*():Mui.Object;
  492.     BEGIN
  493.       IF Mui.cFloattext # no.tailPred(Class).name THEN RETURN NIL END;
  494.       RETURN End();
  495.     END EndFloattext;
  496.  
  497.   PROCEDURE EndVolumelist*():Mui.Object;
  498.     BEGIN
  499.       IF Mui.cVolumelist # no.tailPred(Class).name THEN RETURN NIL END;
  500.       RETURN End();
  501.     END EndVolumelist;
  502.  
  503.   PROCEDURE EndDirlist*():Mui.Object;
  504.     BEGIN
  505.       IF Mui.cDirlist # no.tailPred(Class).name THEN RETURN NIL END;
  506.       RETURN End();
  507.     END EndDirlist;
  508.  
  509.   PROCEDURE EndGroup*():Mui.Object;
  510.     BEGIN
  511.       IF Mui.cGroup # no.tailPred(Class).name THEN RETURN NIL END;
  512.       RETURN End();
  513.     END EndGroup;
  514.  
  515.   PROCEDURE EndScrollbar*():Mui.Object;
  516.     BEGIN
  517.       IF Mui.cScrollbar # no.tailPred(Class).name THEN RETURN NIL END;
  518.       RETURN End();
  519.     END EndScrollbar;
  520.  
  521.   PROCEDURE EndListview*():Mui.Object;
  522.     BEGIN
  523.       IF Mui.cListview # no.tailPred(Class).name THEN RETURN NIL END;
  524.       RETURN End();
  525.     END EndListview;
  526.  
  527.   PROCEDURE EndRadio*():Mui.Object;
  528.     BEGIN
  529.       IF Mui.cRadio # no.tailPred(Class).name THEN RETURN NIL END;
  530.       RETURN End();
  531.     END EndRadio;
  532.  
  533.   PROCEDURE EndCycle*():Mui.Object;
  534.     BEGIN
  535.       IF Mui.cCycle # no.tailPred(Class).name THEN RETURN NIL END;
  536.       RETURN End();
  537.     END EndCycle;
  538.  
  539.   PROCEDURE EndGauge*():Mui.Object;
  540.     BEGIN
  541.       IF Mui.cGauge # no.tailPred(Class).name THEN RETURN NIL END;
  542.       RETURN End();
  543.     END EndGauge;
  544.  
  545.   PROCEDURE EndScale*():Mui.Object;
  546.     BEGIN
  547.       IF Mui.cScale # no.tailPred(Class).name THEN RETURN NIL END;
  548.       RETURN End();
  549.     END EndScale;
  550.  
  551.   PROCEDURE EndBoopsi*():Mui.Object;
  552.     BEGIN
  553.       IF Mui.cBoopsi # no.tailPred(Class).name THEN RETURN NIL END;
  554.       RETURN End();
  555.     END EndBoopsi;
  556.  
  557.   PROCEDURE EndColorfield*():Mui.Object;
  558.     BEGIN
  559.       IF Mui.cColorfield # no.tailPred(Class).name THEN RETURN NIL END;
  560.       RETURN End();
  561.     END EndColorfield;
  562.  
  563.   PROCEDURE EndColoradjust*():Mui.Object;
  564.     BEGIN
  565.       IF Mui.cColoradjust # no.tailPred(Class).name THEN RETURN NIL END;
  566.       RETURN End();
  567.     END EndColoradjust;
  568.  
  569.   PROCEDURE EndPalette*():Mui.Object;
  570.     BEGIN
  571.       IF Mui.cPalette # no.tailPred(Class).name THEN RETURN NIL END;
  572.       RETURN End();
  573.     END EndPalette;
  574.  
  575.   PROCEDURE EndVirtgroup*():Mui.Object;
  576.     BEGIN
  577.       IF Mui.cVirtgroup # no.tailPred(Class).name THEN RETURN NIL END;
  578.       RETURN End();
  579.     END EndVirtgroup;
  580.  
  581.   PROCEDURE EndScrollgroup*():Mui.Object;
  582.     BEGIN
  583.       IF Mui.cScrollgroup # no.tailPred(Class).name THEN RETURN NIL END;
  584.       RETURN End();
  585.     END EndScrollgroup;
  586.  
  587.   PROCEDURE EndPopstring*():Mui.Object;
  588.     BEGIN
  589.       IF Mui.cPopstring # no.tailPred(Class).name THEN RETURN NIL END;
  590.       RETURN End();
  591.     END EndPopstring;
  592.  
  593.   PROCEDURE EndPopobject*():Mui.Object;
  594.     BEGIN
  595.       IF Mui.cPopobject # no.tailPred(Class).name THEN RETURN NIL END;
  596.       RETURN End();
  597.     END EndPopobject;
  598.  
  599.   PROCEDURE EndPopasl*():Mui.Object;
  600.     BEGIN
  601.       IF Mui.cPopasl # no.tailPred(Class).name THEN RETURN NIL END;
  602.       RETURN End();
  603.     END EndPopasl;
  604.  
  605.   PROCEDURE EndScrmodelist*():Mui.Object;
  606.     BEGIN
  607.       IF Mui.cScrmodelist # no.tailPred(Class).name THEN RETURN NIL END;
  608.       RETURN End();
  609.     END EndScrmodelist;
  610.  
  611.   PROCEDURE EndVGroup*():Mui.Object;
  612.     BEGIN
  613.       RETURN EndGroup();
  614.     END EndVGroup;
  615.  
  616.   PROCEDURE EndHGroup*():Mui.Object;
  617.     BEGIN
  618.       RETURN EndGroup();
  619.     END EndHGroup;
  620.  
  621.   PROCEDURE EndColGroup*():Mui.Object;
  622.     BEGIN
  623.       RETURN EndGroup();
  624.     END EndColGroup;
  625.  
  626.   PROCEDURE EndRowGroup*():Mui.Object;
  627.     BEGIN
  628.       RETURN EndGroup();
  629.     END EndRowGroup;
  630.  
  631.   PROCEDURE EndPageGroup*():Mui.Object;
  632.     BEGIN
  633.       RETURN EndGroup();
  634.     END EndPageGroup;
  635.  
  636.   PROCEDURE EndVGroupV*():Mui.Object;
  637.     BEGIN
  638.       RETURN EndGroup();
  639.     END EndVGroupV;
  640.  
  641.   PROCEDURE EndHGroupV*():Mui.Object;
  642.     BEGIN
  643.       RETURN EndGroup();
  644.     END EndHGroupV;
  645.  
  646.   PROCEDURE EndColGroupV*():Mui.Object;
  647.     BEGIN
  648.       RETURN EndGroup();
  649.     END EndColGroupV;
  650.  
  651.   PROCEDURE EndRowGroupV*():Mui.Object;
  652.     BEGIN
  653.       RETURN EndGroup();
  654.     END EndRowGroupV;
  655.  
  656.   PROCEDURE EndPageGroupV*():Mui.Object;
  657.     BEGIN
  658.       RETURN EndGroup();
  659.     END EndPageGroupV;
  660.  
  661.   PROCEDURE NewObjectA*( name{8} : Exec.STRPTR; tags{9} : Utility.TagListPtr );
  662.   (* $SaveRegs+ *)
  663.     BEGIN
  664.       NewClass();
  665.       COPY( name^, no.tailPred(Class).name );
  666.       TagsA( tags );
  667.     END NewObjectA;
  668.  
  669.   PROCEDURE NewObject{"MuiBasics.NewObjectA"} ( name {8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag );
  670.  
  671.   PROCEDURE INewObjectA*( iclass{8} : Intuition.IClassPtr; name{9}: Exec.STRPTR; tags{10} : Utility.TagListPtr );
  672.     BEGIN
  673.       NewClass();
  674.       IF name # NIL THEN
  675.         COPY( name^, no.tailPred(Class).name );
  676.       END;
  677.       no.tailPred(Class).iclass := iclass;
  678.       TagsA( tags );
  679.     END INewObjectA;
  680.  
  681.   PROCEDURE INewObject*{"MuiBasics.INewObjectA"}( iclass{8} : Intuition.IClassPtr; name {9} : ARRAY OF CHAR; tags{10}.. : Utility.Tag );
  682.  
  683. (***************************************************************************
  684. ** Class Tree
  685. ****************************************************************************
  686. **
  687. ** rootclass
  688. **    Notify
  689. **       Application
  690. **       Window
  691. **       Area
  692. **          Rectangle
  693. **          Image
  694. **          Text
  695. **          String
  696. **          Prop
  697. **          Slider
  698. **          List
  699. **             Floattext
  700. **             Volumelist
  701. **             Dirlist
  702. **          Group
  703. **             Scrollbar
  704. **             Listview
  705. **             Radio
  706. **             Cycle
  707. **          Gauge
  708. **          Scale
  709. **          Boopsi
  710. **************************************************************)
  711.  
  712. (**************************************************************************
  713. **
  714. ** Object Generation
  715. ** -----------------
  716. **
  717. ** The xxxObject (and xChilds) procedures generate new instances of MUI classes.
  718. ** Every xxxObject can be followed by tagitems specifying initial create
  719. ** time attributes for the new object and must be terminated with the
  720. ** End macro:
  721. **
  722. ** StringObject;
  723. **          TagItem2( Mui.aStringContents, "foo",
  724. **                    Mui.aStringMaxLen  , 40 );
  725. ** obj := End();
  726. **
  727. ** With the Child, SubWindow and WindowContents shortcuts you can
  728. ** construct a complete GUI within one command:
  729. **
  730. ** ApplicationObject;
  731. **
  732. **          ...
  733. **
  734. **          SubWindow; WindowObject;
  735. **             WindowContents; VGroup;
  736. **                Child; String("foo",40);
  737. **                Child; String("bar",50);
  738. **                Child; HGroup;
  739. **                   Child; CheckMark(TRUE);
  740. **                   Child; CheckMark(FALSE);
  741. **                   end;
  742. **                end;
  743. **             end;
  744. **
  745. **          SubWindow; WindowObject;
  746. **             WindowContents; HGroup;
  747. **                Child; ...;
  748. **                Child; ...;
  749. **                end;
  750. **             end;
  751. **
  752. **          ...
  753. **
  754. ** app := End();
  755. **
  756. ***************************************************************************)
  757.  
  758.   PROCEDURE WindowObjectA*( tags{9} : Utility.TagListPtr );
  759.   (* $SaveRegs+ *)
  760.     BEGIN
  761.       NewObjectA( SYSTEM.ADR( Mui.cWindow ), tags );
  762.     END WindowObjectA;
  763.  
  764.   PROCEDURE WindowObject*{"MuiBasics.WindowObjectA"} ( tags{9}.. : Utility.Tag);
  765.  
  766.   PROCEDURE ImageObjectA*( tags{9} : Utility.TagListPtr );
  767.   (* $SaveRegs+ *)
  768.     BEGIN
  769.       NewObjectA( SYSTEM.ADR( Mui.cImage ), tags );
  770.     END ImageObjectA;
  771.  
  772.   PROCEDURE ImageObject*{"MuiBasics.ImageObjectA"} ( tags{9}.. : Utility.Tag);
  773.  
  774.   PROCEDURE NotifyObjectA*( tags{9} : Utility.TagListPtr );
  775.   (* $SaveRegs+ *)
  776.     BEGIN
  777.       NewObjectA( SYSTEM.ADR( Mui.cNotify ), tags );
  778.     END NotifyObjectA;
  779.  
  780.   PROCEDURE NotifyObject*{"MuiBasics.NotifyObjectA"} ( tags{9}.. : Utility.Tag);
  781.  
  782.   PROCEDURE ApplicationObjectA*( tags{9} : Utility.TagListPtr );
  783.   (* $SaveRegs+ *)
  784.     BEGIN
  785.       NewObjectA( SYSTEM.ADR( Mui.cApplication ), tags );
  786.     END ApplicationObjectA;
  787.  
  788.   PROCEDURE ApplicationObject*{"MuiBasics.ApplicationObjectA"} ( tags{9}.. : Utility.Tag);
  789.  
  790.   PROCEDURE TextObjectA*( tags{9} : Utility.TagListPtr );
  791.   (* $SaveRegs+ *)
  792.     BEGIN
  793.       NewObjectA( SYSTEM.ADR( Mui.cText ), tags );
  794.     END TextObjectA;
  795.  
  796.   PROCEDURE TextObject*{"MuiBasics.TextObjectA"} ( tags{9}.. : Utility.Tag);
  797.  
  798.   PROCEDURE RectangleObjectA*( tags{9} : Utility.TagListPtr );
  799.   (* $SaveRegs+ *)
  800.     BEGIN
  801.       NewObjectA( SYSTEM.ADR( Mui.cRectangle ), tags );
  802.     END RectangleObjectA;
  803.  
  804.   PROCEDURE RectangleObject*{"MuiBasics.RectangleObjectA"} ( tags{9}.. : Utility.Tag);
  805.  
  806.   PROCEDURE ListObjectA*( tags{9} : Utility.TagListPtr );
  807.   (* $SaveRegs+ *)
  808.     BEGIN
  809.       NewObjectA( SYSTEM.ADR( Mui.cList ), tags );
  810.     END ListObjectA;
  811.  
  812.   PROCEDURE ListObject*{"MuiBasics.ListObjectA"} ( tags{9}.. : Utility.Tag);
  813.  
  814.   PROCEDURE PropObjectA*( tags{9} : Utility.TagListPtr );
  815.   (* $SaveRegs+ *)
  816.     BEGIN
  817.       NewObjectA( SYSTEM.ADR( Mui.cProp ), tags );
  818.     END PropObjectA;
  819.  
  820.   PROCEDURE PropObject*{"MuiBasics.PropObjectA"} ( tags{9}.. : Utility.Tag);
  821.  
  822.   PROCEDURE StringObjectA*( tags{9} : Utility.TagListPtr );
  823.   (* $SaveRegs+ *)
  824.     BEGIN
  825.       NewObjectA( SYSTEM.ADR( Mui.cString ), tags );
  826.     END StringObjectA;
  827.  
  828.   PROCEDURE StringObject*{"MuiBasics.StringObjectA"} ( tags{9}.. : Utility.Tag);
  829.  
  830.   PROCEDURE ScrollbarObjectA*( tags{9} : Utility.TagListPtr );
  831.   (* $SaveRegs+ *)
  832.     BEGIN
  833.       NewObjectA( SYSTEM.ADR( Mui.cScrollbar ), tags );
  834.     END ScrollbarObjectA;
  835.  
  836.   PROCEDURE ScrollbarObject*{"MuiBasics.ScrollbarObjectA"} ( tags{9}.. : Utility.Tag);
  837.  
  838.   PROCEDURE ListviewObjectA*( tags{9} : Utility.TagListPtr );
  839.   (* $SaveRegs+ *)
  840.     BEGIN
  841.       NewObjectA( SYSTEM.ADR( Mui.cListview), tags );
  842.     END ListviewObjectA;
  843.  
  844.   PROCEDURE ListviewObject*{"MuiBasics.ListviewObjectA"} ( tags{9}.. : Utility.Tag);
  845.  
  846.   PROCEDURE RadioObjectA*( tags{9} : Utility.TagListPtr );
  847.   (* $SaveRegs+ *)
  848.     BEGIN
  849.       NewObjectA( SYSTEM.ADR( Mui.cRadio ), tags );
  850.     END RadioObjectA;
  851.  
  852.   PROCEDURE RadioObject*{"MuiBasics.RadioObjectA"} ( tags{9}.. : Utility.Tag);
  853.  
  854.   PROCEDURE VolumelistObjectA*( tags{9} : Utility.TagListPtr );
  855.   (* $SaveRegs+ *)
  856.     BEGIN
  857.       NewObjectA( SYSTEM.ADR( Mui.cVolumelist), tags );
  858.     END VolumelistObjectA;
  859.  
  860.   PROCEDURE VolumelistObject*{"MuiBasics.VolumelistObjectA"} ( tags{9}.. : Utility.Tag);
  861.  
  862.   PROCEDURE FloattextObjectA*( tags{9} : Utility.TagListPtr );
  863.   (* $SaveRegs+ *)
  864.     BEGIN
  865.       NewObjectA( SYSTEM.ADR( Mui.cFloattext), tags );
  866.     END FloattextObjectA;
  867.  
  868.   PROCEDURE FloattextObject*{"MuiBasics.FloattextObjectA"} ( tags{9}.. : Utility.Tag);
  869.  
  870.   PROCEDURE DirlistObjectA*( tags{9} : Utility.TagListPtr );
  871.   (* $SaveRegs+ *)
  872.     BEGIN
  873.       NewObjectA( SYSTEM.ADR( Mui.cDirlist ), tags );
  874.     END DirlistObjectA;
  875.  
  876.   PROCEDURE DirlistObject*{"MuiBasics.DirlistObjectA"} ( tags{9}.. : Utility.Tag);
  877.  
  878.  
  879.   PROCEDURE SliderObjectA*( tags{9} : Utility.TagListPtr );
  880.   (* $SaveRegs+ *)
  881.     BEGIN
  882.       NewObjectA( SYSTEM.ADR( Mui.cSlider ), tags );
  883.     END SliderObjectA;
  884.  
  885.   PROCEDURE SliderObject*{"MuiBasics.SliderObjectA"} ( tags{9}.. : Utility.Tag);
  886.  
  887.   PROCEDURE CycleObjectA*( tags{9} : Utility.TagListPtr );
  888.   (* $SaveRegs+ *)
  889.     BEGIN
  890.       NewObjectA( SYSTEM.ADR( Mui.cCycle ), tags );
  891.     END CycleObjectA;
  892.  
  893.   PROCEDURE CycleObject*{"MuiBasics.CycleObjectA"} ( tags{9}.. : Utility.Tag);
  894.  
  895.   PROCEDURE GaugeObjectA*( tags{9} : Utility.TagListPtr );
  896.   (* $SaveRegs+ *)
  897.     BEGIN
  898.       NewObjectA( SYSTEM.ADR( Mui.cGauge ), tags );
  899.     END GaugeObjectA;
  900.  
  901.   PROCEDURE GaugeObject*{"MuiBasics.GaugeObjectA"} ( tags{9}.. : Utility.Tag);
  902.  
  903.   PROCEDURE ScaleObjectA*( tags{9} : Utility.TagListPtr );
  904.   (* $SaveRegs+ *)
  905.     BEGIN
  906.       NewObjectA( SYSTEM.ADR( Mui.cScale ), tags );
  907.     END ScaleObjectA;
  908.  
  909.   PROCEDURE ScaleObject*{"MuiBasics.ScaleObjectA"} ( tags{9}.. : Utility.Tag);
  910.  
  911.   PROCEDURE BoopsiObjectA*( tags{9} : Utility.TagListPtr );
  912.   (* $SaveRegs+ *)
  913.     BEGIN
  914.       NewObjectA( SYSTEM.ADR( Mui.cBoopsi ), tags );
  915.     END BoopsiObjectA;
  916.  
  917.   PROCEDURE BoopsiObject*{"MuiBasics.BoopsiObjectA"} ( tags{9}.. : Utility.Tag);
  918.  
  919.   PROCEDURE ColorfieldObjectA*( tags{9} : Utility.TagListPtr );
  920.   (* $SaveRegs+ *)
  921.     BEGIN
  922.       NewObjectA( SYSTEM.ADR( Mui.cColorfield ), tags );
  923.     END ColorfieldObjectA;
  924.  
  925.   PROCEDURE ColorfieldObject*{"MuiBasics.ColorfieldObjectA"} ( tags{9}.. : Utility.Tag);
  926.  
  927.   PROCEDURE ColoradjustObjectA*( tags{9} : Utility.TagListPtr );
  928.   (* $SaveRegs+ *)
  929.     BEGIN
  930.       NewObjectA( SYSTEM.ADR( Mui.cColoradjust ), tags );
  931.     END ColoradjustObjectA;
  932.  
  933.   PROCEDURE ColoradjustObject*{"MuiBasics.ColoradjustObjectA"} ( tags{9}.. : Utility.Tag);
  934.  
  935.   PROCEDURE PaletteObjectA*( tags{9} : Utility.TagListPtr );
  936.   (* $SaveRegs+ *)
  937.     BEGIN
  938.       NewObjectA( SYSTEM.ADR( Mui.cPalette ), tags );
  939.     END PaletteObjectA;
  940.  
  941.   PROCEDURE PaletteObject*{"MuiBasics.PaletteObjectA"} ( tags{9}.. : Utility.Tag);
  942.  
  943.   PROCEDURE GroupObjectA*( tags{9} : Utility.TagListPtr );
  944.   (* $SaveRegs+ *)
  945.     BEGIN
  946.       NewObjectA( SYSTEM.ADR( Mui.cGroup), tags );
  947.     END GroupObjectA;
  948.  
  949.   PROCEDURE GroupObject*{"MuiBasics.GroupObjectA"} ( tags{9}.. : Utility.Tag);
  950.  
  951.   PROCEDURE VirtgroupObjectA*( tags{9} : Utility.TagListPtr );
  952.   (* $SaveRegs+ *)
  953.     BEGIN
  954.       NewObjectA( SYSTEM.ADR( Mui.cVirtgroup ), tags );
  955.     END VirtgroupObjectA;
  956.  
  957.   PROCEDURE VirtgroupObject*{"MuiBasics.VirtgroupObjectA"} ( tags{9}.. : Utility.Tag);
  958.  
  959.   PROCEDURE ScrollgroupObjectA*( tags{9} : Utility.TagListPtr );
  960.   (* $SaveRegs+ *)
  961.     BEGIN
  962.       NewObjectA( SYSTEM.ADR( Mui.cScrollgroup ), tags );
  963.     END ScrollgroupObjectA;
  964.  
  965.   PROCEDURE ScrollgroupObject*{"MuiBasics.ScrollgroupObjectA"} ( tags{9}.. : Utility.Tag);
  966.  
  967.   PROCEDURE PopstringObjectA*( tags{9} : Utility.TagListPtr );
  968.   (* $SaveRegs+ *)
  969.     BEGIN
  970.       NewObjectA( SYSTEM.ADR( Mui.cPopstring ), tags );
  971.     END PopstringObjectA;
  972.  
  973.   PROCEDURE PopstringObject*{"MuiBasics.PopstringObjectA"} ( tags{9}.. : Utility.Tag);
  974.  
  975.   PROCEDURE PopobjectObjectA*( tags{9} : Utility.TagListPtr );
  976.   (* $SaveRegs+ *)
  977.     BEGIN
  978.       NewObjectA( SYSTEM.ADR( Mui.cPopobject ), tags );
  979.     END PopobjectObjectA;
  980.  
  981.   PROCEDURE PopobjectObject*{"MuiBasics.PopobjectObjectA"} ( tags{9}.. : Utility.Tag);
  982.  
  983.   PROCEDURE PopaslObjectA*( tags{9} : Utility.TagListPtr );
  984.   (* $SaveRegs+ *)
  985.     BEGIN
  986.       NewObjectA( SYSTEM.ADR( Mui.cPopasl ), tags );
  987.     END PopaslObjectA;
  988.  
  989.   PROCEDURE PopaslObject*{"MuiBasics.PopaslObjectA"} ( tags{9}.. : Utility.Tag);
  990.  
  991.   PROCEDURE ScrmodelistObjectA*( tags{9} : Utility.TagListPtr );
  992.   (* $SaveRegs+ *)
  993.     BEGIN
  994.       NewObjectA( SYSTEM.ADR( Mui.cScrmodelist ), tags );
  995.     END ScrmodelistObjectA;
  996.  
  997.   PROCEDURE ScrmodelistObject*{"MuiBasics.ScrmodelistObjectA"} ( tags{9}.. : Utility.Tag);
  998.  
  999.   PROCEDURE VGroupA*( tags{9} : Utility.TagListPtr );
  1000.   (* $SaveRegs+ *)
  1001.     BEGIN
  1002.       NewObjectA( SYSTEM.ADR( Mui.cGroup ), tags );
  1003.       TagsA( tags );
  1004.     END VGroupA;
  1005.  
  1006.   PROCEDURE VGroup*{"MuiBasics.VGroupA"}( tags{9}.. : Utility.Tag );
  1007.  
  1008.   PROCEDURE HGroupA*( tags{9} : Utility.TagListPtr );
  1009.   (* $SaveRegs+ *)
  1010.     BEGIN
  1011.       NewObject( Mui.cGroup, Mui.aGroupHoriz, Exec.true, Utility.end );
  1012.       TagsA( tags );
  1013.     END HGroupA;
  1014.  
  1015.   PROCEDURE HGroup*{"MuiBasics.HGroupA"}( tags{9}.. : Utility.Tag );
  1016.  
  1017.   PROCEDURE ColGroupA*( cols{3} : LONGINT; tags{9} : Utility.TagListPtr  );
  1018.   (* $SaveRegs+ *)
  1019.     BEGIN
  1020.       NewObject( Mui.cGroup, Mui.aGroupColumns, cols, Utility.end );
  1021.       TagsA( tags );
  1022.     END ColGroupA;
  1023.  
  1024.   PROCEDURE ColGroup*{"MuiBasics.ColGroupA"} ( cols{3} : LONGINT; tags{9}.. : Utility.Tag );
  1025.  
  1026.   PROCEDURE RowGroupA*( rows{3} : LONGINT; tags{9} : Utility.TagListPtr  );
  1027.   (* $SaveRegs+ *)
  1028.     BEGIN
  1029.       NewObject( Mui.cGroup, Mui.aGroupRows, rows, Utility.end );
  1030.       TagsA( tags );
  1031.     END RowGroupA;
  1032.  
  1033.   PROCEDURE RowGroup*{"MuiBasics.RowGroupA"}( rows{3} : LONGINT; tags{9}.. : Utility.Tag  );
  1034.  
  1035.   PROCEDURE PageGroupA*( tags{9} : Utility.TagListPtr );
  1036.   (* $SaveRegs+ *)
  1037.     BEGIN
  1038.       NewObject( Mui.cGroup, Mui.aGroupPageMode, Exec.true, Utility.end );
  1039.       TagsA( tags );
  1040.     END PageGroupA;
  1041.  
  1042.   PROCEDURE PageGroup*{"MuiBasics.PageGroupA"}( tags{9}.. : Utility.Tag );
  1043.  
  1044.   PROCEDURE VGroupAV*( tags{9} : Utility.TagListPtr );
  1045.   (* $SaveRegs+ *)
  1046.     BEGIN
  1047.       NewObjectA( SYSTEM.ADR( Mui.cVirtgroup ), tags );
  1048.       TagsA( tags );
  1049.     END VGroupAV;
  1050.  
  1051.   PROCEDURE VGroupV*{"MuiBasics.VGroupAV"}( tags{9}.. : Utility.Tag );
  1052.  
  1053.   PROCEDURE HGroupAV*( tags{9} : Utility.TagListPtr );
  1054.   (* $SaveRegs+ *)
  1055.     BEGIN
  1056.       NewObject( Mui.cVirtgroup, Mui.aGroupHoriz, Exec.true, Utility.end );
  1057.       TagsA( tags );
  1058.     END HGroupAV;
  1059.  
  1060.   PROCEDURE HGroupV*{"MuiBasics.HGroupAV"}( tags{9}.. : Utility.Tag );
  1061.  
  1062.   PROCEDURE ColGroupAV*( cols{3} : LONGINT; tags{9} : Utility.TagListPtr  );
  1063.   (* $SaveRegs+ *)
  1064.     BEGIN
  1065.       NewObject( Mui.cVirtgroup, Mui.aGroupColumns, cols, Utility.end );
  1066.       TagsA( tags );
  1067.     END ColGroupAV;
  1068.  
  1069.   PROCEDURE ColGroupV*{"MuiBasics.ColGroupAV"} ( cols{3} : LONGINT; tags{9}.. : Utility.Tag );
  1070.  
  1071.   PROCEDURE RowGroupAV*( rows{3} : LONGINT; tags{9} : Utility.TagListPtr  );
  1072.   (* $SaveRegs+ *)
  1073.     BEGIN
  1074.       NewObject( Mui.cVirtgroup, Mui.aGroupRows, rows, Utility.end );
  1075.       TagsA( tags );
  1076.     END RowGroupAV;
  1077.  
  1078.   PROCEDURE RowGroupV*{"MuiBasics.RowGroupAV"}( rows{3} : LONGINT; tags{9}.. : Utility.Tag  );
  1079.  
  1080.   PROCEDURE PageGroupAV*( tags{9} : Utility.TagListPtr );
  1081.   (* $SaveRegs+ *)
  1082.     BEGIN
  1083.       NewObject( Mui.cVirtgroup, Mui.aGroupPageMode, Exec.true, Utility.end );
  1084.       TagsA( tags );
  1085.     END PageGroupAV;
  1086.  
  1087.   PROCEDURE PageGroupV*{"MuiBasics.PageGroupAV"}( tags{9}.. : Utility.Tag );
  1088.  
  1089.   PROCEDURE Child*();
  1090.   (* $SaveRegs+ *)
  1091.     BEGIN
  1092.       Tag( Mui.aGroupChild );
  1093.     END Child;
  1094.  
  1095.   PROCEDURE SubWindow*();
  1096.   (* $SaveRegs+ *)
  1097.     BEGIN
  1098.       Tag( Mui.aApplicationWindow );
  1099.     END SubWindow;
  1100.  
  1101.   PROCEDURE WindowContents*();
  1102.   (* $SaveRegs+ *)
  1103.     BEGIN
  1104.       Tag( Mui.aWindowRootObject );
  1105.     END WindowContents;
  1106.  
  1107. (***************************************************************************
  1108. **
  1109. ** Frame Types
  1110. ** -----------
  1111. **
  1112. ** These procedures may be used to specify one of MUI's different frame types.
  1113. ** Note that every procedure consists of one or more { ti_Tag, ti_Data }
  1114. ** pairs.
  1115. **
  1116. ** GroupFrameT() is a special kind of frame that contains a centered
  1117. ** title text.
  1118. **
  1119. ** HGroup; GroupFrameT("Horiz Groups");
  1120. **    Child; RectangleObject; TextFrame  ; end;
  1121. **    Child; RectangleObject; StringFrame; end;
  1122. **    Child; RectangleObject; ButtonFrame; end;
  1123. **    Child; RectangleObject; ListFrame  ; end;
  1124. **    end;
  1125. **
  1126. ***************************************************************************)
  1127.  
  1128.   PROCEDURE NoFrameA*( tags{9} : Utility.TagListPtr );
  1129.     BEGIN
  1130.       TagItem( Mui.aFrame , Mui.vFrameNone );
  1131.       TagsA( tags );
  1132.     END NoFrameA;
  1133.  
  1134.   PROCEDURE NoFrame*{"MuiBasics.NoFrameA"} ( tags{9}.. : Utility.Tag );
  1135.  
  1136.   PROCEDURE ButtonFrameA*( tags{9} : Utility.TagListPtr  );
  1137.     BEGIN
  1138.       TagItem( Mui.aFrame , Mui.vFrameButton );
  1139.       TagsA( tags );
  1140.     END ButtonFrameA;
  1141.  
  1142.   PROCEDURE ButtonFrame*{"MuiBasics.ButtonFrameA"} ( tags{9}.. : Utility.Tag  );
  1143.  
  1144.   PROCEDURE ImageButtonFrameA*( tags{9} : Utility.TagListPtr );
  1145.     BEGIN
  1146.       TagItem( Mui.aFrame , Mui.vFrameImageButton );
  1147.       TagsA( tags );
  1148.     END ImageButtonFrameA;
  1149.  
  1150.   PROCEDURE ImageButtonFrame*{"MuiBasics.ImageButtonFrameA"} ( tags{9}.. : Utility.Tag );
  1151.  
  1152.   PROCEDURE TextFrameA*( tags{9} : Utility.TagListPtr );
  1153.     BEGIN
  1154.       TagItem( Mui.aFrame , Mui.vFrameText );
  1155.       TagsA( tags );
  1156.     END TextFrameA;
  1157.  
  1158.   PROCEDURE TextFrame*{"MuiBasics.TextFrameA"} ( tags{9}.. : Utility.Tag );
  1159.  
  1160.   PROCEDURE StringFrameA*( tags{9} : Utility.TagListPtr );
  1161.     BEGIN
  1162.       TagItem( Mui.aFrame , Mui.vFrameString );
  1163.       TagsA( tags );
  1164.     END StringFrameA;
  1165.  
  1166.   PROCEDURE StringFrame*{"MuiBasics.StringFrameA"} ( tags{9}.. : Utility.Tag );
  1167.  
  1168.   PROCEDURE ReadListFrameA*( tags{9} : Utility.TagListPtr );
  1169.     BEGIN
  1170.       TagItem(  Mui.aFrame , Mui.vFrameReadList );
  1171.       TagsA( tags );
  1172.     END ReadListFrameA;
  1173.  
  1174.   PROCEDURE ReadListFrame*{"MuiBasics.ReadListFrameA"} ( tags{9}.. : Utility.Tag );
  1175.  
  1176.   PROCEDURE InputListFrameA*( tags{9} : Utility.TagListPtr );
  1177.     BEGIN
  1178.       TagItem( Mui.aFrame , Mui.vFrameInputList );
  1179.       TagsA( tags );
  1180.     END InputListFrameA;
  1181.  
  1182.   PROCEDURE InputListFrame*{"MuiBasics.InputListFrameA"} ( tags{9}.. : Utility.Tag );
  1183.  
  1184.   PROCEDURE PropFrameA*( tags{9} : Utility.TagListPtr );
  1185.     BEGIN
  1186.       TagItem( Mui.aFrame , Mui.vFrameProp );
  1187.       TagsA( tags );
  1188.     END PropFrameA;
  1189.  
  1190.   PROCEDURE PropFrame*{"MuiBasics.PropFrameA"} ( tags{9}.. : Utility.Tag );
  1191.  
  1192.   PROCEDURE SliderFrameA*( tags{9} : Utility.TagListPtr );
  1193.     BEGIN
  1194.       TagItem( Mui.aFrame , Mui.vFrameSlider );
  1195.       TagsA( tags );
  1196.     END SliderFrameA;
  1197.  
  1198.   PROCEDURE SliderFrame*{"MuiBasics.SliderFrameA"} ( tags{9}.. : Utility.Tag );
  1199.  
  1200.   PROCEDURE GaugeFrameA*( tags{9} : Utility.TagListPtr );
  1201.     BEGIN
  1202.       TagItem( Mui.aFrame , Mui.vFrameGauge );
  1203.       TagsA( tags );
  1204.     END GaugeFrameA;
  1205.  
  1206.   PROCEDURE GaugeFrame*{"MuiBasics.GaugeFrameA"} ( tags{9}.. : Utility.Tag );
  1207.  
  1208.   PROCEDURE VirtualFrameA*( tags{9} : Utility.TagListPtr );
  1209.     BEGIN
  1210.       TagItem( Mui.aFrame , Mui.vFrameVirtual );
  1211.       TagsA( tags );
  1212.     END VirtualFrameA;
  1213.  
  1214.   PROCEDURE VirtualFrame*{"MuiBasics.VirtualFrameA"} ( tags{9}.. : Utility.Tag );
  1215.  
  1216.   PROCEDURE GroupFrameA*( tags{9} : Utility.TagListPtr );
  1217.     BEGIN
  1218.       TagItem( Mui.aFrame , Mui.vFrameGroup );
  1219.       TagsA( tags );
  1220.     END GroupFrameA;
  1221.  
  1222.   PROCEDURE GroupFrame*{"MuiBasics.GroupFrameA"} ( tags{9}.. : Utility.Tag );
  1223.  
  1224.   PROCEDURE GroupFrameTA*( s{8} : Exec.STRPTR; tags{9} : Utility.TagListPtr );
  1225.     BEGIN
  1226.       TagItem2( Mui.aFrame, Mui.vFrameGroup, Mui.aFrameTitle, s );
  1227.       TagsA( tags );
  1228.     END GroupFrameTA;
  1229.  
  1230.   PROCEDURE GroupFrameT*{"MuiBasics.GroupFrameTA"}( s{8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag );
  1231.  
  1232. (***************************************************************************
  1233. **
  1234. ** Spacing Procedures
  1235. ** ------------------
  1236. **
  1237. ***************************************************************************)
  1238.  
  1239.   PROCEDURE GroupSpacing*( x: LONGINT );
  1240.     BEGIN
  1241.       TagItem( Mui.aGroupSpacing, x );
  1242.     END GroupSpacing;
  1243.  
  1244.   PROCEDURE HVSpace*();
  1245.     BEGIN
  1246.       Tag( Mui.NewObject( Mui.cRectangle, Utility.done ) );
  1247.     END HVSpace;
  1248.  
  1249.  
  1250.   PROCEDURE HSpace*( x : LONGINT );
  1251.     VAR t : Utility.Tags3;
  1252.     BEGIN
  1253.       IF x # 0 THEN
  1254.         t[0].tag := Mui.aFixWidth;
  1255.         t[0].data := x;
  1256.       ELSE
  1257.         t[0].tag := Utility.ignore;
  1258.       END;
  1259.       t[1] := Utility.TagItem( Mui.aVertWeight, 0 );
  1260.       t[2] := Utility.TagItem( Utility.done, 0 );
  1261.       Tag( Mui.NewObjectA( Mui.cRectangle, t ) );
  1262.     END HSpace;
  1263.  
  1264.   PROCEDURE VSpace*( x : LONGINT );
  1265.     VAR t : Utility.Tags3;
  1266.     BEGIN
  1267.       IF x # 0 THEN
  1268.         t[0].tag := Mui.aFixHeight;
  1269.         t[0].data := x;
  1270.       ELSE
  1271.         t[0].tag := Utility.ignore;
  1272.       END;
  1273.       t[1] := Utility.TagItem( Mui.aHorizWeight, 0 );
  1274.       t[2] := Utility.TagItem( Utility.done, 0 );
  1275.       Tag( Mui.NewObjectA( Mui.cRectangle, t ) );
  1276.     END VSpace;
  1277.  
  1278.  
  1279.   PROCEDURE HCenterBegin*();
  1280.     BEGIN
  1281.       HGroup; GroupSpacing( 0 );
  1282.         Child; HSpace( 0 );
  1283.     END HCenterBegin;
  1284.  
  1285.   PROCEDURE HCenterEnd*();
  1286.     BEGIN
  1287.         Child; HSpace( 0 );
  1288.       end;
  1289.     END HCenterEnd;
  1290.  
  1291.   PROCEDURE VCenterBegin*();
  1292.     BEGIN
  1293.       VGroup; GroupSpacing( 0 );
  1294.         Child ; VSpace( 0 );
  1295.     END VCenterBegin;
  1296.  
  1297.   PROCEDURE VCenterEnd*();
  1298.     BEGIN
  1299.         Child ; VSpace( 0 );
  1300.       end;
  1301.     END VCenterEnd;
  1302.  
  1303.   PROCEDURE InnerSpacing*( h, v : LONGINT );
  1304.     BEGIN
  1305.       Tags( Mui.aInnerLeft   , h,
  1306.             Mui.aInnerRight  , h,
  1307.             Mui.aInnerTop    , v,
  1308.             Mui.aInnerBottom , v,
  1309.             Utility.end );
  1310.     END InnerSpacing;
  1311.  
  1312.  
  1313. (***************************************************************************
  1314. **
  1315. ** String-Object
  1316. ** -------------
  1317. **
  1318. ** The following procedure creates a simple string gadget.
  1319. **
  1320. ***************************************************************************)
  1321.  
  1322.   PROCEDURE StringA*( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT ):Mui.Object;
  1323.     BEGIN
  1324.       StringObject;
  1325.         StringFrame;
  1326.         TagItem2( Mui.aStringMaxLen, maxlen,
  1327.                   Mui.aStringContents, contents );
  1328.       RETURN End();
  1329.     END StringA;
  1330.  
  1331.   PROCEDURE String * {"MuiBasics.StringA"} ( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT ):Mui.Object;
  1332.   PROCEDURE string * {"MuiBasics.StringA"} ( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT );
  1333.  
  1334.   PROCEDURE KeyStringA*( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT; controlchar{4} : LONGINT ):Mui.Object;
  1335.     BEGIN
  1336.       StringObject;
  1337.         StringFrame;
  1338.         TagItem3( Mui.aStringMaxLen, maxlen,
  1339.                   Mui.aStringContents, contents,
  1340.                   Mui.aControlChar, controlchar );
  1341.       RETURN End();
  1342.     END KeyStringA;
  1343.  
  1344.   PROCEDURE KeyString * {"MuiBasics.KeyStringA"} ( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT; controlchar{4}: CHAR ):Mui.Object;
  1345.   PROCEDURE keyString * {"MuiBasics.KeyStringA"} ( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT; controlchar{4}: CHAR );
  1346.  
  1347. (***************************************************************************
  1348. **
  1349. ** CheckMark-Object
  1350. ** ----------------
  1351. **
  1352. ** The following procedure creates a checkmark gadget.
  1353. **
  1354. ***************************************************************************)
  1355.  
  1356.   PROCEDURE CheckMarkA*( checked{4} : BOOLEAN ):Mui.Object;
  1357.    BEGIN
  1358.       ImageObject;
  1359.         ImageButtonFrame;
  1360.           Tags( Mui.aInputMode , Mui.vInputModeToggle,
  1361.                 Mui.aImageSpec    , Mui.iCheckMark,
  1362.                 Mui.aImageFreeVert, Exec.true,
  1363.                 Mui.aSelected     , SYSTEM.VAL( SHORTINT, checked ),
  1364.                 Mui.aBackground   , Mui.iButtonBack,
  1365.                 Mui.aShowSelState , Exec.false,
  1366.                 Utility.end );
  1367.       RETURN End();
  1368.     END CheckMarkA;
  1369.  
  1370.   PROCEDURE CheckMark * {"MuiBasics.CheckMarkA"}( checked{4} : BOOLEAN ):Mui.Object;
  1371.   PROCEDURE checkMark * {"MuiBasics.CheckMarkA"}( checked{4} : BOOLEAN );
  1372.  
  1373.   PROCEDURE KeyCheckMarkA*( checked{4} : Exec.LONGBOOL; key{3} : LONGINT ):Mui.Object;
  1374.    BEGIN
  1375.       ImageObject;
  1376.         ImageButtonFrame;
  1377.           Tags( Mui.aInputMode    , Mui.vInputModeToggle,
  1378.                 Mui.aImageSpec    , Mui.iCheckMark,
  1379.                 Mui.aImageFreeVert, Exec.true,
  1380.                 Mui.aSelected     , checked,
  1381.                 Mui.aBackground   , Mui.iButtonBack,
  1382.                 Mui.aShowSelState , Exec.false,
  1383.                 Mui.aControlChar  , key,
  1384.                 Utility.end );
  1385.       RETURN End();
  1386.     END KeyCheckMarkA;
  1387.  
  1388.   PROCEDURE KeyCheckMark *{"MuiBasics.KeyCheckMarkA"}( checked{4} : Exec.LONGBOOL; key{3} : CHAR ):Mui.Object;
  1389.   PROCEDURE keyCheckMark *{"MuiBasics.KeyCheckMarkA"}( checked{4} : Exec.LONGBOOL; key{3} : CHAR );
  1390.  
  1391. (***************************************************************************
  1392. **
  1393. ** Button-Objects
  1394. ** --------------
  1395. **
  1396. ** Note: Use small letters for KeyButtons, e.g.
  1397. **       KeyButton("Cancel",'c')  and not  KeyButton("Cancel",'C') !!
  1398. **
  1399. ***************************************************************************)
  1400.  
  1401.   PROCEDURE SimpleButtonA * ( name{8} : Exec.STRPTR; tags{9} : Utility.TagListPtr ):Mui.Object;
  1402.   (* $SaveRegs+ *)
  1403.     BEGIN
  1404.       TextObject;
  1405.         ButtonFrame;
  1406.           Tags( Mui.aTextContents, name,
  1407.                 Mui.aTextPreParse, SYSTEM.ADR("\033c"),
  1408.                 Mui.aTextSetMax  , Exec.false,
  1409.                 Mui.aInputMode   , Mui.vInputModeRelVerify,
  1410.                 Mui.aBackground  , Mui.iButtonBack,
  1411.                 Utility.end );
  1412.         TagsA( tags );
  1413.       RETURN End();
  1414.     END SimpleButtonA;
  1415.  
  1416.   PROCEDURE SimpleButton * {"MuiBasics.SimpleButtonA"} ( name{8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1417.   PROCEDURE simpleButton * {"MuiBasics.SimpleButtonA"} ( name{8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag );
  1418.  
  1419.   PROCEDURE KeyButtonA * ( name{8} : Exec.STRPTR; key{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1420.   (* $SaveRegs+ *)
  1421.     BEGIN
  1422.       TextObject;
  1423.         ButtonFrame;
  1424.          Tags( Mui.aTextContents, name,
  1425.                Mui.aTextPreParse, SYSTEM.ADR("\033c"),
  1426.                Mui.aTextSetMax  , Exec.false,
  1427.                Mui.aTextHiChar  , key,
  1428.                Mui.aControlChar , key,
  1429.                Mui.aInputMode   , Mui.vInputModeRelVerify,
  1430.                Mui.aBackground  , Mui.iButtonBack,
  1431.                Utility.end );
  1432.         TagsA( tags );
  1433.       RETURN End();
  1434.     END KeyButtonA;
  1435.  
  1436.   PROCEDURE KeyButton * {"MuiBasics.KeyButtonA"} ( name{8} : ARRAY OF CHAR; key{4} : CHAR; tags{9}.. : Utility.TagListPtr ):Mui.Object;
  1437.   PROCEDURE keyButton * {"MuiBasics.KeyButtonA"} ( name{8} : ARRAY OF CHAR; key{4} : CHAR; tags{9}.. : Utility.TagListPtr );
  1438.  
  1439. (***************************************************************************
  1440. **
  1441. ** Cycle-Object
  1442. ** ------------
  1443. **
  1444. ***************************************************************************)
  1445.  
  1446.   PROCEDURE CycleA * ( entries{10} : Exec.APTR; tags{9} : Utility.TagListPtr ):Mui.Object;
  1447.   (* $SaveRegs+ *)
  1448.     BEGIN
  1449.       CycleObject( Mui.aCycleEntries, entries, Utility.end );
  1450.         TagsA( tags );
  1451.       RETURN End();
  1452.     END CycleA;
  1453.  
  1454.   PROCEDURE Cycle * {"MuiBasics.CycleA"} ( entries{10} : Exec.APTR; tags{9}.. : Utility.Tag ):Mui.Object;
  1455.   PROCEDURE cycle * {"MuiBasics.CycleA"} ( entries{10} : Exec.APTR; tags{9}.. : Utility.Tag );
  1456.  
  1457.   PROCEDURE KeyCycleA * ( entries{10} : Exec.APTR; key{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1458.   (* $SaveRegs+ *)
  1459.     BEGIN
  1460.       CycleObject( Mui.aCycleEntries, entries,
  1461.                    Mui.aControlChar, key,
  1462.                    Utility.end );
  1463.         TagsA( tags );
  1464.       RETURN End();
  1465.     END KeyCycleA;
  1466.  
  1467.   PROCEDURE KeyCycle * {"MuiBasics.KeyCycleA"} ( entries{10} : Exec.APTR; key{4} : CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1468.   PROCEDURE keyCycle * {"MuiBasics.KeyCycleA"} ( entries{10} : Exec.APTR; key{4} : CHAR; tags{9}.. : Utility.Tag );
  1469.  
  1470. (***************************************************************************
  1471. **
  1472. ** Radio-Object
  1473. ** ------------
  1474. **
  1475. ***************************************************************************)
  1476.  
  1477.   PROCEDURE RadioA * ( name{8}: Exec.STRPTR; entries{10} : Exec.APTR; tags{9} : Utility.TagListPtr ):Mui.Object;
  1478.   (* $SaveRegs+ *)
  1479.     BEGIN
  1480.       RadioObject;
  1481.         GroupFrameT( name^ );
  1482.           TagItem( Mui.aRadioEntries, entries );
  1483.         TagsA( tags );
  1484.       RETURN End();
  1485.     END RadioA;
  1486.  
  1487.   PROCEDURE Radio * {"MuiBasics.RadioA"} ( name{8} : ARRAY OF CHAR; entries{10} : Exec.APTR; tags{9}.. : Utility.Tag ):Mui.Object;
  1488.   PROCEDURE radio * {"MuiBasics.RadioA"} ( name{8} : ARRAY OF CHAR; entries{10} : Exec.APTR; tags{9}.. : Utility.Tag );
  1489.  
  1490.   PROCEDURE KeyRadioA * ( name{8}: Exec.STRPTR; entries{10} : Exec.APTR; key{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1491.   (* $SaveRegs+ *)
  1492.     BEGIN
  1493.       RadioObject;
  1494.         GroupFrameT( name^ );
  1495.           TagItem2( Mui.aRadioEntries, entries,
  1496.                     Mui.aControlChar, key );
  1497.         TagsA( tags );
  1498.       RETURN End();
  1499.     END KeyRadioA;
  1500.  
  1501.   PROCEDURE KeyRadio * {"MuiBasics.KeyRadioA"} ( name{8} : ARRAY OF CHAR; entries{10} : Exec.APTR; key{4} : CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1502.   PROCEDURE keyRadio * {"MuiBasics.KeyRadioA"} ( name{8} : ARRAY OF CHAR; entries{10} : Exec.APTR; key{4} : CHAR; tags{9}.. : Utility.Tag );
  1503.  
  1504. (***************************************************************************
  1505. **
  1506. ** Slider-Object
  1507. ** -------------
  1508. **
  1509. ***************************************************************************)
  1510.  
  1511.   PROCEDURE SliderA * ( min{2}, max{3}, level{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1512.   (* $SaveRegs+ *)
  1513.     BEGIN
  1514.       SliderObject( Mui.aSliderMin, min,
  1515.                     Mui.aSliderMax, max,
  1516.                     Mui.aSliderLevel, level,
  1517.                     Utility.end );
  1518.         TagsA( tags );
  1519.       RETURN End();
  1520.     END SliderA;
  1521.  
  1522.   PROCEDURE Slider * {"MuiBasics.SliderA"} ( min{2}, max{3}, level{4} : LONGINT; tags{9}.. : Utility.Tag ):Mui.Object;
  1523.   PROCEDURE slider * {"MuiBasics.SliderA"} ( min{2}, max{3}, level{4} : LONGINT; tags{9}.. : Utility.Tag );
  1524.  
  1525.   PROCEDURE KeySliderA * ( min{2}, max{3}, level{4}, key{5} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1526.   (* $SaveRegs+ *)
  1527.     BEGIN
  1528.       SliderObject( Mui.aSliderMin, min,
  1529.                     Mui.aSliderMax, max,
  1530.                     Mui.aSliderLevel, level,
  1531.                     Mui.aControlChar, key,
  1532.                     Utility.end );
  1533.         TagsA( tags );
  1534.       RETURN End();
  1535.     END KeySliderA;
  1536.  
  1537.   PROCEDURE KeySlider * {"MuiBasics.KeySliderA"} ( min{2}, max{3}, level{4} : LONGINT; key{5} : CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1538.   PROCEDURE keySlider * {"MuiBasics.KeySliderA"} ( min{2}, max{3}, level{4} : LONGINT; key{5} : CHAR; tags{9}.. : Utility.Tag );
  1539.  
  1540.   PROCEDURE VSliderA * ( min{2}, max{3}, level{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1541.   (* $SaveRegs+ *)
  1542.     BEGIN
  1543.       SliderObject( Mui.aSliderMin, min,
  1544.                     Mui.aSliderMax, max,
  1545.                     Mui.aSliderLevel, level,
  1546.                     Mui.aGroupHoriz, Exec.false,
  1547.                     Utility.end );
  1548.         TagsA( tags );
  1549.       RETURN End();
  1550.     END VSliderA;
  1551.  
  1552.   PROCEDURE VSlider * {"MuiBasics.VSliderA"} ( min{2}, max{3}, level{4} : LONGINT; tags{9}.. : Utility.Tag ):Mui.Object;
  1553.   PROCEDURE vSlider * {"MuiBasics.VSliderA"} ( min{2}, max{3}, level{4} : LONGINT; tags{9}.. : Utility.Tag );
  1554.  
  1555.   PROCEDURE KeyVSliderA * ( min{2}, max{3}, level{4}, key{5} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1556.   (* $SaveRegs+ *)
  1557.     BEGIN
  1558.       SliderObject( Mui.aSliderMin, min,
  1559.                     Mui.aSliderMax, max,
  1560.                     Mui.aSliderLevel, level,
  1561.                     Mui.aGroupHoriz, Exec.false,
  1562.                     Mui.aControlChar, key,
  1563.                     Utility.end );
  1564.         TagsA( tags );
  1565.       RETURN End();
  1566.     END KeyVSliderA;
  1567.  
  1568.   PROCEDURE KeyVSlider * {"MuiBasics.KeySliderA"} ( min{2}, max{3}, level{4} : LONGINT; key{5} : CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1569.   PROCEDURE keyVSlider * {"MuiBasics.KeySliderA"} ( min{2}, max{3}, level{4} : LONGINT; key{5} : CHAR; tags{9}.. : Utility.Tag );
  1570.  
  1571. (***************************************************************************
  1572. **
  1573. ** Popup-Object
  1574. ** ------------
  1575. **
  1576. ** An often needed GUI element is a string gadget with a little button
  1577. ** that opens up a (small) window with a list containing possible entries
  1578. ** for this gadget. Together with the Popup and the String macro,
  1579. ** such a thing would look like
  1580. **
  1581. ** VGroup;
  1582. **    Child; PopupBegin;
  1583. **             Child; STFont := String( "helvetica/13", 32 );
  1584. **           PopupEnd( hook, Mui.iPopUp, STFont );
  1585. **    ...;
  1586. **
  1587. ** STFont will hold a pointer to the embedded string gadget and can
  1588. ** be used to set and get its contents as with every other string object.
  1589. **
  1590. ** For Hook description see below.
  1591. ** The hook will be called with the string gadget as object whenever
  1592. ** the user releases the popup button and could look like this:
  1593. **
  1594. ** PROCEDURE FontReq( hook : Hook; obj : Mui.Object : args : Args) : LONGINT;
  1595. **   VAR window : Intuition.WindowPtr;
  1596. **       l, t, w, h : LONGINT;
  1597. **       req : ASL.AslRequesterPtr;
  1598. ** BEGIN
  1599. **    ...
  1600. **
  1601. **    (* put our application to sleep while displaying the requester *)
  1602. **      Set( Application, Mui.aApplicationSleep, Exec.true );
  1603. **
  1604. **    (* get the calling objects window and position *)
  1605. **      Get( obj, Mui.aWindow  , window );
  1606. **      Get( obj, Mui.aLeftEdge, l );
  1607. **      Get( obj, Mui.aTopEdge , t );
  1608. **      Get( obj, Mui.aWidth   , w );
  1609. **      Get( obj, Mui.aHeight  , h );
  1610. **
  1611. **    req := Mui.AllocAslRequestTags( ASL.fontRequest, Utility.done )
  1612. **    IF req # NIL THEN
  1613. **
  1614. **       IF (Mui.AslRequestTags(req,
  1615. **               ASL.foWindow         ,window,
  1616. **               ASL.foPrivateIDCMP   ,TRUE,
  1617. **               ASL.foTitleText      ,"Select Font",
  1618. **               ASL.foInitialLeftEdge,window->LeftEdge + l,
  1619. **               ASL.foInitialTopEdge ,window->TopEdge  + t+h,
  1620. **               ASL.foInitialWidth   ,w,
  1621. **               ASL.foInitialHeight  ,250,
  1622. **               Utility.done ) ) THEN
  1623. **
  1624. **          (* set the new contents for our string gadget *)
  1625. **                              Set( args(PopupArgs).linkedObj, Mui.aStringContents, req(ASL.FontRequester).attr.name);
  1626. **       END;
  1627. **       Mui.FreeAslRequest( req );
  1628. **   END;
  1629. **
  1630. **    (* wake up our application again *)
  1631. **      Set(Application, Mui.aApplicationSleep, Exec.false );
  1632. **
  1633. **      RETURN( 0);
  1634. ** END FontReq:
  1635. **
  1636. ** Note: This Procedure is translated to Oberon on the fly, no warranty is given
  1637. **       that this piece of code works.
  1638. **
  1639. ***************************************************************************)
  1640.  
  1641.   PROCEDURE PopupBegin * ();
  1642.     VAR dummy : Mui.Object;
  1643.     BEGIN
  1644.       HGroup; GroupSpacing( 1 );
  1645.     END PopupBegin;
  1646.  
  1647.   PROCEDURE PopupEnd * ( hook : Hook; img : LONGINT; obj : Mui.Object ):Mui.Object;
  1648.     VAR dummy : Mui.Object;
  1649.     BEGIN
  1650.         Child; ImageObject;
  1651.                  ImageButtonFrame;
  1652.                  Tags( Mui.aImageSpec, img,
  1653.                        Mui.aImageFontMatchWidth, Exec.true,
  1654.                        Mui.aImageFreeVert, Exec.true,
  1655.                        Mui.aInputMode, Mui.vInputModeRelVerify,
  1656.                        Mui.aBackground, Mui.iButtonBack,
  1657.                        Utility.end );
  1658.                dummy := End();
  1659.                IF (obj # NIL) & (dummy # NIL) & (hook # NIL) THEN
  1660.                  SetHookObject( hook, dummy );
  1661.                  Mui.DoMethod( dummy, Mui.mNotify, Mui.aPressed, Exec.false,
  1662.                                dummy, 3, Mui.mCallHook, hook, obj );
  1663.                END;
  1664.       end;
  1665.       RETURN dummy;
  1666.     END PopupEnd;
  1667.  
  1668.   PROCEDURE popupEnd * {"MuiBasics.PopupEnd"} ( hook : Hook; img : LONGINT; obj : Mui.Object );
  1669.  
  1670. (***************************************************************************
  1671. **
  1672. ** Labeling Objects
  1673. ** ----------------
  1674. **
  1675. ** Labeling objects, e.g. a group of string gadgets,
  1676. **
  1677. **   Small: |foo   |
  1678. **  Normal: |bar   |
  1679. **     Big: |foobar|
  1680. **    Huge: |barfoo|
  1681. **
  1682. ** is done using a 2 column group:
  1683. **
  1684. ** ColGroup(2);
  1685. **      Child; Label2( "Small:"  );
  1686. **    Child; StringObject; end;
  1687. **      Child; Label2( "Normal:" );
  1688. **    Child; StringObject; end;
  1689. **      Child; Label2( "Big:"    );
  1690. **    Child; StringObject; end;
  1691. **      Child; Label2( "Huge:"   );
  1692. **    Child; StringObject; end;
  1693. **    end;
  1694. **
  1695. ** Note that we have three versions of the label procedure, depending on
  1696. ** the frame type of the right hand object:
  1697. **
  1698. ** Label1(): For use with standard frames (e.g. checkmarks).
  1699. ** Label2(): For use with double high frames (e.g. string gadgets).
  1700. ** Label() : For use with objects without a frame.
  1701. **
  1702. ** These procedures ensure that your label will look fine even if the
  1703. ** user of your application configured some strange spacing values.
  1704. ** If you want to use your own labeling, you'll have to pay attention
  1705. ** on this topic yourself.
  1706. **
  1707. ***************************************************************************)
  1708.  
  1709.   PROCEDURE Label * ( label : ARRAY OF CHAR ):Mui.Object;
  1710.   (* $CopyArrays- *)
  1711.     BEGIN
  1712.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1713.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1714.                   Mui.aWeight      , 0,
  1715.                   Mui.aInnerLeft   , 0,
  1716.                   Mui.aInnerRight  , 0,
  1717.                   Utility.end );
  1718.       RETURN End();
  1719.     END Label;
  1720.  
  1721.   PROCEDURE Label1 * ( label : ARRAY OF CHAR ):Mui.Object;
  1722.   (* $CopyArrays- *)
  1723.     BEGIN
  1724.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1725.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1726.                   Mui.aWeight      , 0,
  1727.                   Mui.aInnerLeft   , 0,
  1728.                   Mui.aInnerRight  , 0,
  1729.                   Utility.end );
  1730.         ButtonFrame;
  1731.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1732.       RETURN End();
  1733.     END Label1;
  1734.  
  1735.   PROCEDURE Label2 * ( label : ARRAY OF CHAR ):Mui.Object;
  1736.   (* $CopyArrays- *)
  1737.     BEGIN
  1738.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1739.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1740.                   Mui.aWeight      , 0,
  1741.                   Mui.aInnerLeft   , 0,
  1742.                   Mui.aInnerRight  , 0,
  1743.                   Utility.end );
  1744.         StringFrame;
  1745.          TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1746.       RETURN End();
  1747.     END Label2;
  1748.  
  1749.   PROCEDURE LLabel * ( label : ARRAY OF CHAR ):Mui.Object;
  1750.   (* $CopyArrays- *)
  1751.     BEGIN
  1752.       TextObject( Mui.aTextContents, SYSTEM.ADR( label ),
  1753.                   Mui.aWeight      , 0,
  1754.                   Mui.aInnerLeft   , 0,
  1755.                   Mui.aInnerRight  , 0,
  1756.                   Utility.end );
  1757.       RETURN End();
  1758.     END LLabel;
  1759.  
  1760.   PROCEDURE LLabel1 * ( label : ARRAY OF CHAR ):Mui.Object;
  1761.   (* $CopyArrays- *)
  1762.     BEGIN
  1763.       TextObject( Mui.aTextContents, SYSTEM.ADR( label ),
  1764.                   Mui.aWeight      , 0,
  1765.                   Mui.aInnerLeft   , 0,
  1766.                   Mui.aInnerRight  , 0,
  1767.                   Utility.end );
  1768.         ButtonFrame;
  1769.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1770.       RETURN End();
  1771.     END LLabel1;
  1772.  
  1773.   PROCEDURE LLabel2 * ( label : ARRAY OF CHAR ):Mui.Object;
  1774.   (* $CopyArrays- *)
  1775.     BEGIN
  1776.       TextObject( Mui.aTextContents, SYSTEM.ADR( label ),
  1777.                   Mui.aWeight      , 0,
  1778.                   Mui.aInnerLeft   , 0,
  1779.                   Mui.aInnerRight  , 0,
  1780.                   Utility.end );
  1781.         StringFrame;
  1782.          TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1783.       RETURN End();
  1784.     END LLabel2;
  1785.  
  1786.   PROCEDURE KeyLabel * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1787.   (* $CopyArrays- *)
  1788.     BEGIN
  1789.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1790.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1791.                   Mui.aTextHiChar  , ORD( hichar ),
  1792.                   Mui.aWeight      , 0,
  1793.                   Mui.aInnerLeft   , 0,
  1794.                   Mui.aInnerRight  , 0,
  1795.                   Utility.end );
  1796.       RETURN End();
  1797.     END KeyLabel;
  1798.  
  1799.   PROCEDURE KeyLabel1 * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1800.   (* $CopyArrays- *)
  1801.     BEGIN
  1802.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1803.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1804.                   Mui.aTextHiChar  , ORD( hichar ),
  1805.                   Mui.aWeight      , 0,
  1806.                   Mui.aInnerLeft   , 0,
  1807.                   Mui.aInnerRight  , 0,
  1808.                   Utility.end );
  1809.         ButtonFrame;
  1810.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1811.       RETURN End();
  1812.     END KeyLabel1;
  1813.  
  1814.   PROCEDURE KeyLabel2 * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1815.   (* $CopyArrays- *)
  1816.     BEGIN
  1817.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1818.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1819.                   Mui.aTextHiChar  , ORD( hichar ),
  1820.                   Mui.aWeight      , 0,
  1821.                   Mui.aInnerLeft   , 0,
  1822.                   Mui.aInnerRight  , 0,
  1823.                   Utility.end );
  1824.         StringFrame;
  1825.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1826.       RETURN End();
  1827.     END KeyLabel2;
  1828.  
  1829.   PROCEDURE KeyLLabel * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1830.   (* $CopyArrays- *)
  1831.     BEGIN
  1832.       TextObject( Mui.aTextContents, SYSTEM.ADR( label ),
  1833.                   Mui.aTextHiChar  , ORD( hichar ),
  1834.                   Mui.aWeight      , 0,
  1835.                   Mui.aInnerLeft   , 0,
  1836.                   Mui.aInnerRight  , 0,
  1837.                   Utility.end );
  1838.       RETURN End();
  1839.     END KeyLLabel;
  1840.  
  1841.   PROCEDURE KeyLLabel1 * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1842.   (* $CopyArrays- *)
  1843.     BEGIN
  1844.       TextObject( Mui.aTextContents, SYSTEM.ADR( label ),
  1845.                   Mui.aTextHiChar  , ORD( hichar ),
  1846.                   Mui.aWeight      , 0,
  1847.                   Mui.aInnerLeft   , 0,
  1848.                   Mui.aInnerRight  , 0,
  1849.                   Utility.end );
  1850.         ButtonFrame;
  1851.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1852.       RETURN End();
  1853.     END KeyLLabel1;
  1854.  
  1855.   PROCEDURE KeyLLabel2 * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1856.   (* $CopyArrays- *)
  1857.     BEGIN
  1858.       TextObject( Mui.aTextContents, SYSTEM.ADR( label ),
  1859.                   Mui.aTextHiChar  , ORD( hichar ),
  1860.                   Mui.aWeight      , 0,
  1861.                   Mui.aInnerLeft   , 0,
  1862.                   Mui.aInnerRight  , 0,
  1863.                   Utility.end );
  1864.         StringFrame;
  1865.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1866.       RETURN End();
  1867.     END KeyLLabel2;
  1868.  
  1869.   PROCEDURE label * {"MuiBasics.Label"} ( lab : ARRAY OF CHAR );
  1870.  
  1871.   PROCEDURE label1 * {"MuiBasics.Label1"} ( lab : ARRAY OF CHAR );
  1872.  
  1873.   PROCEDURE label2 * {"MuiBasics.Label2"} ( lab : ARRAY OF CHAR );
  1874.  
  1875.   PROCEDURE lLabel * {"MuiBasics.LLabel"} ( lab : ARRAY OF CHAR );
  1876.  
  1877.   PROCEDURE lLabel1 * {"MuiBasics.LLabel1"} ( lab : ARRAY OF CHAR );
  1878.  
  1879.   PROCEDURE lLabel2 * {"MuiBasics.LLabel2"} ( lab : ARRAY OF CHAR );
  1880.  
  1881.   PROCEDURE keyLabel * {"MuiBasics.KeyLabel"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1882.  
  1883.   PROCEDURE keyLabel1 * {"MuiBasics.KeyLabel1"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1884.  
  1885.   PROCEDURE keyLabel2 * {"MuiBasics.KeyLabel2"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1886.  
  1887.   PROCEDURE lKeyLabel * {"MuiBasics.LKeyLabel"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1888.  
  1889.   PROCEDURE lKeyLabel1 * {"MuiBasics.LKeyLabel1"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1890.  
  1891.   PROCEDURE lKeyLabel2 * {"MuiBasics.LKeyLabel2"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1892.  
  1893. (***************************************************************************
  1894. **
  1895. ** Controlling Objects
  1896. ** -------------------
  1897. **
  1898. ** Set() and Get() are two short stubs for BOOPSI GetAttr() and SetAttrs()
  1899. ** calls:
  1900. **
  1901. **
  1902. **    VAR x : Exec.STRPTR;
  1903. **
  1904. **    Set(obj,MUIA_String_Contents, SYSTEM.ADR("foobar") );
  1905. **    Get(obj,MUIA_String_Contents, x);
  1906. **
  1907. **    Dos.PrintF( "gadget contains '%s'\n" , x );
  1908. **
  1909. ** NNset() sets an attribute without triggering a possible notification.
  1910. **
  1911. **
  1912. ***************************************************************************)
  1913.  
  1914.   PROCEDURE Set*( obj : Mui.Object; attr, value : Exec.APTR );
  1915.     BEGIN
  1916.       IF Intuition.SetAttrs( obj, attr, value, Utility.end ) = 0 THEN END
  1917.     END Set;
  1918.  
  1919.   PROCEDURE Get*( obj : Mui.Object; attr : LONGINT ; VAR store : ARRAY OF Exec.BYTE );
  1920.     BEGIN
  1921.       IF Intuition.GetAttr( attr, obj, store) = 0 THEN END
  1922.     END Get;
  1923.  
  1924.   PROCEDURE NNSet( obj : Mui.Object; attr, value : Exec.APTR );
  1925.     BEGIN
  1926.       IF Intuition.SetAttrs( obj, Mui.aNoNotify, Exec.LTRUE, attr, value, Utility.end ) = 0 THEN END
  1927.     END NNSet;
  1928.  
  1929.   PROCEDURE SetMutex * ( obj : Mui.Object; n : LONGINT );
  1930.     BEGIN
  1931.       Set( obj, Mui.aRadioActive, n );
  1932.     END SetMutex;
  1933.  
  1934.   PROCEDURE SetCycle * ( obj : Mui.Object; n : LONGINT );
  1935.     BEGIN
  1936.       Set( obj, Mui.aCycleActive, n );
  1937.     END SetCycle;
  1938.  
  1939.   PROCEDURE SetString * ( obj : Mui.Object; s : Exec.STRPTR );
  1940.     BEGIN
  1941.       Set( obj, Mui.aStringContents, s );
  1942.     END SetString;
  1943.  
  1944.   PROCEDURE SetCheckmark * ( obj : Mui.Object; b : BOOLEAN );
  1945.     BEGIN
  1946.       Set( obj, Mui.aSelected, SYSTEM.VAL(SHORTINT,b) );
  1947.     END SetCheckmark;
  1948.  
  1949.   PROCEDURE SetSlider * ( obj : Mui.Object; l : LONGINT );
  1950.     BEGIN
  1951.       Set( obj, Mui.aSliderLevel, l );
  1952.     END SetSlider;
  1953.  
  1954. BEGIN
  1955.   Init();
  1956. END MuiBasics.
  1957.  
  1958.